Texture compression is a technique for reducing bandwidth usage in 3D graphics. A texture image is stored in compressed form in external memory, and when a particular pixel in the texture is being accessed during 3D rendering, a block of pixels is sent in compressed form over the bus. This data is then decompressed on the fly, and used by the 3D graphics pipeline. This results in bandwidth savings, since each pixel is often stored in as little as 4 bpp (bits per pixel), compared to 24 bpp in uncompressed form. The most widely adopted texture compression (TC) scheme is known as S3TC or DXTC, see [1-2].
Normal mapping and bump mapping are similar techniques, which add detail to geometrical objects in an inexpensive way, see [3]. More specifically, a texture, called a bump map or normal map, is used at each pixel to perturb its normal. When computing the shading of a surface, lighting depends on the surface normal. In this way the surface appears to have a higher amount of geometrical detail than it actually has. To create models that can be used in, for example, realtime games, a common approach is to first create an object with rich geometrical detail. Some polygon simplification algorithm is then used to reduce the amount of geometry while keeping the general shape. The “difference” between the highly detailed geometrical object and the less detailed object can be computed and baked into a normal map. Using this normal map on the less detailed object makes for fast rendering of objects that look geometrically detailed.
Even though normal mapping reduces the complexity, the normal map still has to be stored. This requires some kind of texture compression technique for normal maps. A normal map block compression scheme called 3Dc, has been developed for this purpose, see [4]. One can also use existing DXT schemes for normal map block compression, see [5]. However, since the DXT schemes were originally designed for texture images, the results can often be quite poor.
Another application of interest is high dynamic range (HDR) images. Images in graphics are usually stored (in uncompressed mode) using 8 bits per color component, resulting in 24 bpp for RGB. However, such images can only represent a limited amount of the information present in real scenes, where luminance values spanning many orders of magnitude are common. To accurately represent the full dynamic range of an HDR image, each color component can be stored as a 16-bit floating-point number. In this case, an uncompressed HDR RGB image needs 48 bpp. Compression of such images is clearly desirable. An attempt in this direction is represented by [6].